def convert_height(height_str):
    if height_str.replace('.', '', 1).isdigit():
        height_m = float(height_str)
        return height_m * 100
    else:
        try:
            return int(height_str)
        except ValueError:
            print("无效的身高输入，请输入一个数字。")
            return None

def get_user_input(prompt, data_type, condition, error_message):
    while True:
        user_input = input(prompt)
        try:
            value = data_type(user_input)
            if condition(value):
                return value
            else:
                print(error_message)
        except ValueError:
            print("无效的输入，请输入正确的数据类型。")

def calculate_bmr(sex, age, weight, height):
    if sex == 'm':
        # 男性的 BMR 计算公式
        return 66 + (13.7 * weight) + (5 * height) - (6.8 * age)
    elif sex == 'f':
        # 女性的 BMR 计算公式
        return 655 + (9.6 * weight) + (1.8 * height) - (4.7 * age)
    else:
        raise ValueError("性别必须是'm'或'f'。")

def health_analysis(bmr):
    if bmr < 1200:
        return "您的BMR值较低，建议咨询专业人士。"
    elif 1200 <= bmr <= 2200:
        return "您的BMR值正常，请继续保持。"
    else:
        return "您的BMR值较高，注意饮食和运动。"

def main():
    print("欢迎使用基础代谢率（BMR）健康分析程序！")
    sex = get_user_input("请输入您的性别（'m' 代表男性，'f' 代表女性）：", str.lower, lambda x: x in ['m', 'f'], "性别只能是'm'或'f'。")
    age = get_user_input("请输入您的年龄（岁）：", int, lambda x: 1 <= x <= 120, "年龄必须在1到120岁之间。")
    height_str = input("请输入您的身高（可以输入米或厘米，例如 1.75 或 175）：")
    height_cm = convert_height(height_str)
    if height_cm is None:  # 如果转换失败
        return

    weight = get_user_input("请输入您的体重（千克）：", float, lambda x: x > 0, "体重必须大于0。")

    try:
        bmr = calculate_bmr(sex, age, weight, height_cm)
        analysis = health_analysis(bmr)
        print(f"\n您的基础代谢率（BMR）是：{bmr} 卡路里/天。")
        print(analysis)
    except ValueError as e:
        print(e)

if __name__ == "__main__":
    main()
